// 用于简化导入操作并且支持 es6 导入导出， 文档地址 https://www.npmjs.com/package/module-alias
require('module-alias/register');
const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
const app = express();

// 添加环境变量
require('dotenv').config({
  override: true,
  path: path.join(process.cwd(), `.env.${process.env.NODE_ENV}`)
});

//! 注意自己的文件最好在添加环境变量后，后续可能会用环境变量
const router = require('./router/index');
// 响应数据封装
const proResponse = require('@/middlewares/response');
// api 拦截器
const interceptor = require('@/middlewares/interceptor');
// 路由列表

// swagger ui 生成
require('./utils/swaggerUI')(app);

app.use(cookieParser());
app.use(bodyParser.urlencoded({ extended: false })); // 解析表单中的 urlencoded 格式的数据
app.use(bodyParser.json()); // 解析表单中的 JSON 格式的数据

// 设置静态资源目录
app.use(express.static(path.join(__dirname, '../public')));
app.use('/docs', express.static(path.join(__dirname, '../docs')));

// 设置 ejs 模板
app
  .set('view engine', 'ejs')
  .set('views', path.join(__dirname, './views'))
  .engine('html', require('ejs').__express);

// 允许跨越
app.use(function (req, res, next) {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
  next();
});

//! app.use 中间件使用顺序需要注意，中间件至上而下

// 返回封装数据
app.use(proResponse);
// 请求拦截处理
app.use(interceptor);
// 路由的中间件
app.use(router);

module.exports = app;
